package util;

import java.lang.reflect.Array;

import util.HarfTr;

public class KelimeTr {
	protected String content;
	protected HarfTr[] contentHrf;
	private int length;
	private boolean govde = false;
	private boolean yumusama = false;
	private boolean yumusakUnsuzVarmi = false;
	private int yumusamaSayisi=0;
	private int[] yumusamaIndexleri={0,0,0,0,0,0,0,0,0,0};
	// TDK imla klavuzunda yumusamaları tesbit etmek için
	private boolean yumusamaYapar = false;

	public boolean isYumusamaYapar() {
		return yumusamaYapar;
	}

	public void setYumusamaYapar(boolean yumusamaYapar) {
		this.yumusamaYapar = yumusamaYapar;
	}
    @Override
    public int hashCode() {
        return content.hashCode();
    }

   @Override
    public boolean equals(Object object) {

        if (object != null && object instanceof KelimeTr) {
        	KelimeTr kelime = (KelimeTr) object;
            if (content == null) {
                return (kelime.content == null);
            }
            else {
                return content.equals(kelime.content);
            }
        }
        return false;
    }	
	public HarfTr getHarfTrByIndx(int indx){
		HarfTr hrf=new HarfTr();
		hrf=contentHrf[indx];
		return hrf;
	}
	public KelimeTr() {
		content = new String();
		contentHrf = new HarfTr[40];
	}

	public KelimeTr(String str) {
		content = new String(str);
		contentHrf = new HarfTr[str.length()];
		setKelimeUzunlugu();

		setContentHrf(str); // TODO contentHrf tam olmadı.

		setYumusakUnsuzVarmi();

		setYumusama();
	}
	// yumusama, yumusamaIndexleri, yumusamaSayisi hesaplar
	//
	public void setYumusama() {
		HarfTr currentHrf=new HarfTr ();
		HarfTr nextHrf=new HarfTr ();
		int ndx=0;		

		if (isYumusakUnsuzVarmi()) {
			for (int i = 0; i < length-1; i++) {
				currentHrf=getHarfTrByIndx(i);
				nextHrf=getHarfTrByIndx(i+1);
				//YumusakSureksizSessiz = b,c,d,g,ğ kontrolü
				if(currentHrf.isYumusakSureksizSessiz()&& nextHrf.isSesli() ){
					this.setYumusama(true);

					//this.yumusamaIndexleri[ndx++]=i+1;
					setYumusamaIndexleri(ndx,i);
					ndx++;
					this.setYumusamaSayisi(this.getYumusamaSayisi() + 1);
				}
			}//end for
		}//end if
	}//end function
	public void setKelimeUzunlugu() {
		this.length = content.length();

	}

	public void setkUzunlugu() {
		this.length = content.length();
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	public HarfTr[] getContentHrf() {
		return contentHrf;
	}

	public void setContentHrf(String str) {
		for (int i = 0; i < length; i++) {
			char aCh = str.charAt(i);
			HarfTr tempHrf = new HarfTr(Character.toString(aCh));
			contentHrf[i] = tempHrf;
		}
	}
	// İndeksi verilen Harf değiştirilir.
	public void setContentHrfByIndex(int index,HarfTr aHarf) {
		// indeksi verilen Harf değiştirilir.
		contentHrf[index]=aHarf;

		// "contentHrf" içeriği "content"  kopyalanır
		StringBuilder tempStrBldr = new StringBuilder(content);
		tempStrBldr.setCharAt(index, (aHarf.getContent().charAt(0)));
		content=tempStrBldr.toString();
	}
	
	public int getLength() {
		return length;
	}

	public void setLength(int kUzunlugu) {
		this.length = kUzunlugu;
	}

	public boolean isGovde() {
		return govde;
	}

	public void setGovde(boolean govdeMi) {
		this.govde = govdeMi;
	}

	public boolean isYumusama() {
		return yumusama;
	}

	public void setYumusama(boolean yumusama) {
		this.yumusama = yumusama;
	}


	public boolean isYumusakUnsuzVarmi() {
		return yumusakUnsuzVarmi;
	}

	public void setYumusakUnsuzVarmi(boolean yumusakUnsuzVarmi) {
		this.yumusakUnsuzVarmi = yumusakUnsuzVarmi;
	}

	public void setYumusakUnsuzVarmi() {
		for (int i = 0; i < length; i++) {
			if (contentHrf[i].isYumusakSureksizSessiz()){
				this.yumusakUnsuzVarmi = true;
				return ; // yumuşak ünsüz varsa çık
			}
		}
	}
	public int getYumusamaSayisi() {
		return yumusamaSayisi;
	}
	public void setYumusamaSayisi(int yumusamaSayisi) {
		this.yumusamaSayisi = yumusamaSayisi;
	}
	public int[] getYumusamaIndexleri() {
		return yumusamaIndexleri;
	}
	public void setYumusamaIndexleri(int[] yumusamaIndexleri) {
		this.yumusamaIndexleri = yumusamaIndexleri;
	}
	public void setYumusamaIndexleri(int index,int value) {
		this.yumusamaIndexleri [index] = value;
	}
	protected void copyContentHrf2Content() {
		StringBuilder tempStrBldr = new StringBuilder(Array.getLength(contentHrf));
		int index=0;
		for(HarfTr hrf: contentHrf){
			tempStrBldr.append(hrf.getContent());
		}
		content=tempStrBldr.toString();
	}
}
